perm filename FOCUS.SAI[DIA,HPM] blob
sn#507003 filedate 1980-05-04 generic text, type T, neo UTF8
BEGIN "FOCUS"
REQUIRE "PIXHDR.SAI[VIS,HPM]" SOURCE_FILE;
REQUIRE "FILHDR.SAI[VIS,HPM]" SOURCE_FILE;
REQUIRE "REDPIC.SAI[VIS,HPM]" SOURCE_FILE;
STRING INP,S; INTEGER ARRAY T[0:10];
INTEGER PHIG,PWID,I,J,IX,IY,FOO,OFSET,OFSET2; REAL X,Y;
DO PRINT("Input picture:") UNTIL GETPFD(INP←INCHWL,T[0])>0;
PRINT("Feature location (Y, X):"); S←INCHWL;
Y←REALSCAN(S,FOO); X←REALSCAN(S,FOO);
PHIG←T[PCLN]; PWID←T[LNBY];
BEGIN
INTEGER ARRAY IP[0:REDDIM(PHIG,PWID,9)], TIP[0:PFLDIM(INP)],
WD[0:WNFDIM(INP,8)],
PS[0:REDDIM(256,256,9)];
GETPFL(INP,TIP[0]);
MAKRED(PHIG,PWID,9,IP[0]);
SHRINK(TIP[0],IP[IP[1]]);
BEGIN
INTEGER MIP,MTIP;
INTEGER ARRAY XFRM[0:MIP←IP[IP[1]+BMAX]];
MTIP←TIP[BMAX] LSH (9-TIP[BYBI]);
FOR I←0 STEP 1 UNTIL MIP DO
BEGIN
XFRM[I]←I*MIP/MTIP;
END;
PERBIT(IP[IP[1]],XFRM[0]);
END;
PICRED(IP[0]);
REDWIN(IP[0],Y,X,8,WD[0]);
MAKRED(256,256,9,PS[0]);
SHRINK(IP[IP[1]],PS[PS[1]]);
PICRED(PS[0]);
OFSET←0;
PRSFIL("");
FOR I←5 STEP -1 UNTIL 1 DO
BEGIN
SHRINK(PS[PS[I+1]],PS[PS[I]]);
LOWPAS(PS[PS[I]]);
OFSET←2*OFSET+1;
END;
IY←Y*(256-OFSET); IX←X*(256-OFSET);
BEGIN
INTEGER ARRAY TR[0:PIXDIM(256-OFSET,256-OFSET,9)];
MAKPIX(256-OFSET,256-OFSET,9,TR[0]);
TILE(PS[PS[1]],0,0,256-OFSET,256-OFSET,TR[0],0,0);
FOR I←5 STEP -1 UNTIL 1 DO
BEGIN
INTEGER ARRAY RP[0:REDDIM(8*2↑(I-1),8*2↑(I-1),9)];
INTEGER SW;
SW←8*2↑(I-1);
MAKRED(SW,SW,9,RP[0]);
SHRINK(WD[WD[I]],RP[RP[I]]);
OFSET2←0;
FOR J←I-1 STEP -1 UNTIL 1 DO
BEGIN
SHRINK(RP[RP[J+1]],RP[RP[J]]);
LOWPAS(RP[RP[J]]);
OFSET2←2*OFSET2+1;
END;
TILE(RP[RP[1]],0,0,
SW-OFSET2,SW-OFSET2,
TR[0],IY-(SW-OFSET2)%2,IX-(SW-OFSET2)%2);
END;
PUTPFL(TR[0],"REDEX.PIC[DIA,HPM]",2)
END;
IX←X*IP[IP[1]+LNBY]; IY←Y*IP[IP[1]+PCLN];
FOR I←1 STEP 1 UNTIL 6 DO
BEGIN
INTEGER IW,LX,LY,K;
PROCEDURE AL(INTEGER I,J);
PUTEL(IP[IP[1]],I,J,
IF PIXEL(IP[IP[1]],I,J)>IP[IP[1]+BMAX]%2 THEN 0 ELSE IP[IP[1]+BMAX]);
IW←2↑(I+2);
LX←IX-IW%2; LY←IY-IW%2;
FOR K←LX STEP 1 UNTIL LX+IW DO BEGIN AL(LY,K); AL(LY+IW,K); END;
FOR K←LY STEP 1 UNTIL LY+IW DO BEGIN AL(K,LX); AL(K,LX+IW); END;
END;
PUTPFL(IP[IP[1]],"LINEX.PIC[DIA,HPM]");
END;
END "FOCUS";